package cn.lg.soar.common.util;

import cn.lg.soar.common.data.msg.I18n;
import cn.lg.soar.common.exceptions.BaseBException;
import cn.lg.soar.common.util.asserts.IAssert;

import java.util.Collection;
import java.util.Map;

/**
 * 断言工具（系统功能断言）
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public class AssertUtil {

    private final static IAssert ASSERT = (message, args) -> {
        throw new BaseBException(0, message, args);
    };

    /**
     * 断言两个值相等，否则抛异常
     * @param a
     * @param b
     * @param message
     * @param args
     */
    public static void equals(Object a, Object b, I18n message, Object...args) {
        ASSERT.equals(a, b, message, args);
    }

    /**
     * 断言两个值相等，否则抛异常
     * @param a
     * @param b
     * @param message
     * @param args
     */
    public static void equals(Object a, Object b, String message, Object...args) {
        ASSERT.equals(a, b, message, args);
    }

    /**
     * 断言结果为真，否则抛异常
     * @param b
     * @param message
     * @param args
     */
    public static void isTrue(Boolean b, I18n message, Object...args) {
        ASSERT.isTrue(b, message, args);
    }

    /**
     * 断言结果为真，否则抛异常
     * @param b
     * @param message
     * @param args
     */
    public static void isTrue(Boolean b, String message, Object...args) {
        ASSERT.isTrue(b, message, args);
    }

    /**
     * 断言结果为假，否则抛异常
     * @param b
     * @param message
     * @param args
     */
    public static void isFalse(Boolean b, I18n message, Object...args) {
        ASSERT.isFalse(b, message, args);
    }

    /**
     * 断言结果为假，否则抛异常
     * @param b
     * @param message
     * @param args
     */
    public static void isFalse(Boolean b, String message, Object...args) {
        ASSERT.isFalse(b, message, args);
    }

    /**
     * 断言结果不能为null，否则抛异常
     * @param o
     * @param message
     * @param args
     */
    public static void notNull(Object o, I18n message, Object...args) {
        ASSERT.notNull(o, message, args);
    }

    /**
     * 断言结果不能为null，否则抛异常
     * @param o
     * @param message
     * @param args
     */
    public static void notNull(Object o, String message, Object...args) {
        ASSERT.notNull(o, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param collection
     * @param message
     * @param args
     */
    public static void notEmpty(Collection<?> collection, I18n message, Object...args) {
        ASSERT.notEmpty(collection, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param collection
     * @param message
     * @param args
     */
    public static void notEmpty(Collection<?> collection, String message, Object...args) {
        ASSERT.notEmpty(collection, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param map
     * @param message
     * @param args
     */
    public static void notEmpty(Map<?, ?> map, I18n message, Object...args) {
        ASSERT.notEmpty(map, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param map
     * @param message
     * @param args
     */
    public static void notEmpty(Map<?, ?> map, String message, Object...args) {
        ASSERT.notEmpty(map, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param array
     * @param message
     * @param args
     */
    public static void notEmpty(Object[] array, I18n message, Object...args) {
        ASSERT.notEmpty(array, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param array
     * @param message
     * @param args
     */
    public static void notEmpty(Object[] array, String message, Object...args) {
        ASSERT.notEmpty(array, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param string
     * @param message
     * @param args
     */
    public static void notEmpty(CharSequence string, I18n message, Object...args) {
        ASSERT.notEmpty(string, message, args);
    }

    /**
     * 断言结果不是空，否则抛异常
     * @param string
     * @param message
     * @param args
     */
    public static void notEmpty(CharSequence string, String message, Object...args) {
        ASSERT.notEmpty(string, message, args);
    }

    /**
     * 非空
     * @param o
     * @param message
     * @param args
     */
    public static void notEmpty(Object o, I18n message, Object...args) {
        ASSERT.notEmpty(o, message, args);
    }

    /**
     * 非空
     * @param o
     * @param message
     * @param args
     */
    public static void notEmpty(Object o, String message, Object...args) {
        ASSERT.notEmpty(o, message, args);
    }

    public static void throwException(I18n message, Object...args) {
        ASSERT.throwException(message, args);
    }

    public static void throwException(String message, Object...args) {
        ASSERT.throwException(message, args);
    }

}
